﻿using System;
using System.Collections;
using System.Web.UI.WebControls;
using ASPNETVN.PORTAL.Components.Configuration.Settings;
using ASPNETVN.PORTAL.Components.Helpers;
using ASPNETVN.PORTAL.Components.UI;
using ASPNETVN.PORTAL.Components.UI.DataTypes;

namespace ASPNETVN.PORTAL.Modules.DOWNLOAD
{
    public enum ModulePages
    {
        ItemList,
        Detail,
        AddEditItem,
        CategoryManager,
        ItemManager,
        AddToForum
    }

    public partial class Main : PortalModuleControl
    {
        public Main()
        {
            // Define an Array List
            ArrayList list1 = new ArrayList();

            // Sắp xếp theo cột.
            list1.Add(new ListItem("10 records per a page", "10"));
            list1.Add(new ListItem("20 records per a page", "20"));
            list1.Add(new ListItem("50 records per a page", "50"));
            list1.Add(new ListItem("100 records per a page", "100"));

            ModuleSettingItem setting = new ModuleSettingItem(new CustomListDataType(list1, "Text", "Value"));
            setting.Name = "Page Size";
            setting.Value = "10";
            setting.Description = "Page Size";
            setting.SortOrder = 1;
            this.BaseSettings.Add("PageSize", setting);
            
            // Yêu cầu đăng nhập trước khi download.
            setting = new ModuleSettingItem(new BooleanDataType(false));
            setting.Name = "Đăng nhập trước khi tải về";
            setting.Description = "Đăng nhập trước khi tải về";
            setting.SortOrder = 2;
            this.BaseSettings.Add("RequireAuthentication", setting);

            // Yêu cầu nhập check code trước khi download.
            setting = new ModuleSettingItem(new BooleanDataType(false));
            setting.Name = "Nhập mã kiểm tra trước khi tải về";
            setting.Description = "Nhập mã kiểm tra trước khi tải về";
            setting.SortOrder = 2;
            this.BaseSettings.Add("RequireCheckCode", setting);

            // Cho phép hiển thị các liên kết: Mới cập nhật.
            setting = new ModuleSettingItem(new BooleanDataType(true));
            setting.Name = "Display Option: Newest Items";
            setting.Description = "Display Option: Newest Items";
            setting.SortOrder = 3;
            this.BaseSettings.Add("DisplayOptionNone", setting);

            // Cho phép hiển thị các liên kết: Xem nhiều nhất.
            setting = new ModuleSettingItem(new BooleanDataType(true));
            setting.Name = "Display Option: Top View";
            setting.Description = "Display Option: Top View";
            setting.SortOrder = 4;
            this.BaseSettings.Add("DisplayOptionTopView", setting);

            // Cho phép hiển thị các liên kết: Tải về nhiều nhất.
            setting = new ModuleSettingItem(new BooleanDataType(true));
            setting.Name = "Display Option: Top Download";
            setting.Description = "Display Option: Top Download";
            setting.SortOrder = 5;
            this.BaseSettings.Add("DisplayOptionTopDownload", setting);

            // Cho phép hiển thị các liên kết: Bình luận nhiều nhất.
            setting = new ModuleSettingItem(new BooleanDataType(true));
            setting.Name = "Display Option: Top Comment";
            setting.Description = "Display Option: Top Comment";
            setting.SortOrder = 6;
            this.BaseSettings.Add("DisplayOptionTopComment", setting);

            // Chọn cách nhập liệu: Đơn giản / Đầy đủ.
            ArrayList listInputOption = new ArrayList();

            // Sắp xếp theo cột.
            listInputOption.Add(new ListItem("Đơn giản (Simple)", "Simple"));
            listInputOption.Add(new ListItem("Đầy đủ (Full)", "Full"));
            setting = new ModuleSettingItem(new CustomListDataType(listInputOption, "Text", "Value"));
            setting.Value = "Simple";
            setting.Name = "Input Option: Simple / Full";
            setting.Description = "Input Option: Simple / Full";
            setting.SortOrder = 7;
            this.BaseSettings.Add("InputOption", setting);

            // Cách thức lưu trữ file upload.
            ArrayList listStorageType = new ArrayList();
            listStorageType.Add(new ListItem("Link", "LINK"));
            listStorageType.Add(new ListItem("File", "FILE"));
            listStorageType.Add(new ListItem("Database", "DATABASE"));

            setting = new ModuleSettingItem(new CustomListDataType(listStorageType, "Text", "Value"));
            setting.Name = "Storage Type";
            setting.Description = "Storage Type";
            setting.SortOrder = 8;
            this.BaseSettings.Add("StorageType", setting);
        }

        private void LoadChildControl()
        {
            const string basePath = "~/Modules/ASPNETVN.PORTAL.Modules.DOWNLOAD/";
            const string pageQuery = "page";
            string pageName = Request.QueryString[pageQuery];

            ModulePages page = ModulePages.ItemList;
            if (pageName != null)
            {
                page = (ModulePages)Enum.Parse(typeof(ModulePages), Request.QueryString[pageQuery], true);
            }

            string src = string.Format("{0}Controls/{1}.ascx", basePath, page);
            ModulePage ctl = (ModulePage)this.LoadControl(src);
            ctl.ParentControl = this;
            ContentPane.Controls.Add(ctl);
        }

        protected string GetAddEditItemUrl(int itemID)
        {
            Hashtable settings = this.Settings;
            if (settings["InputOption"].ToString().Equals("Simple"))
            {
                return HttpUrlBuilder.BuildAddEditUrl(this.ModuleID, itemID, "SimpleAddEditItem", "");
            }
            return HttpUrlBuilder.BuildAddEditUrl(this.ModuleID, itemID, "AddEditItem", "");
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            this.LoadChildControl();
            this.ModuleTitle.AddUrl = this.GetAddEditItemUrl(0);
        }
    }
}